#pragma once

// #include "../time_sync/time_sync.h"

#include "../object.h"

namespace bevdet::tracker {

class AssociateFactor;
class Associator {
public:
    explicit Associator(std::vector<std::shared_ptr<AssociateFactor>> factors);

    MultiAssociatedObject multiAssociate(int64_t microTs, const ObjectSptrVector& dest, const ObjectSptrVector& src);

private:
    AssociatedObject associate(int64_t microTs, const ObjectSptrVector& dest, const ObjectSptrVector& src);
    int32_t assessScore(const Object&, const Object&);

private:
    std::vector<std::shared_ptr<AssociateFactor>> factors_;
};

}